package com.atmosphere.interfaces.component;

import com.jme.image.Texture;
import com.jme.scene.Geometry;

/**
 * <code>IGeometryComponent</code> defines the interface of the
 * component unit that represents the physical geometry of the
 * sky, cloud and other atmosphere units that may rotate around
 * the vertical axis at a given rate.
 * <p>
 * <code>IGeometryComponent</code> is responsible for maintaining
 * a set of day and night textures that the geometry fades in and
 * out to. It also maintains the rotation properties.
 * <p>
 * <code>IGeometryComponent</code> also provides the functionality
 * to use an imported pre-baked geometry to represent the physical
 * sky structure instead of the default sphere/dome geometry.
 *
 * @author Yi Wang (Neakor)
 * @version Creation date: 05-19-2009 16:13 EST
 * @version Modified date: 05-21-2009 12:09 EST
 */
public interface IGeometryComponent extends IClocktimeComponent {

	/**
	 * Set if the default geometry should be a dome or sphere.
	 * @param dome The use dome <code>Boolean</code> flag. False to use sphere.
	 */
	public void setDefaultDome(boolean dome);

	/**
	 * Set the day texture.
	 * @param texture The day <code>Texture</code>.
	 */
	public void setDayTexture(Texture texture);
	
	/**
	 * Set the night texture.
	 * @param texture The night <code>Texture</code>.
	 */
	public void setNightTexture(Texture texture);
	
	/**
	 * Set the day-night and night-day transition texture.
	 * @param texture The transition <code>Texture</code>.
	 */
	public void setTransitionTexture(Texture texture);
	
	/**
	 * Set the length of one complete rotation cycle in seconds.
	 * @param length The <code>Float</code> length in seconds.
	 */
	public void setRotationLength(float length);
	
	/**
	 * Set the geometry to be used instead of the default one.
	 * @param geometry The <code>Geometry</code> to be used.
	 */
	public void setGeometry(Geometry geometry);
	
	/**
	 * Retrieve the day texture.
	 * @return The day <code>Texture</code>.
	 */
	public Texture getDayTexture();
	
	/**
	 * Retrieve the night texture.
	 * @return The night <code>Texture</code>.
	 */
	public Texture getNightTexture();
	
	/**
	 * Retrieve the day-night and night-day transition texture.
	 * @return The transition <code>Texture</code>.
	 */
	public Texture getTransitionTexture();

	/**
	 * Retrieve the length of one complete rotation.
	 * @return The <code>Float</code> length in seconds.
	 */
	public float getRotationLength();
	
	/**
	 * Retrieve the actual geometry.
	 * @return The <code>Geometry</code> instance.
	 */
	public Geometry getGeometry();

	/**
	 * Check if the default geometry is dome.
	 * @return The dome <code>Boolean</code> flag. False if sphere is used.
	 */
	public boolean isDefaultDome();
}
